#!/bin/bash

# 设置工作目录和输出目录
workdir=/media/gm/新加卷/CCNP-20241104
NIFTI_DIR=${workdir}/nifti
sub_list=${workdir}/2024.5.19-8.31/subs.list
LOG_FILE=~/Desktop/conversion.log

# 检查被试列表文件是否存在
if [ ! -f "$sub_list" ]; then
    echo "错误：未找到被试列表文件 '$sub_list'。" | tee -a "$LOG_FILE"
    exit 1
fi

# 记录日志，保存到日志文件
exec > >(tee -a "$LOG_FILE") 2>&1

# 读取被试列表到数组，过滤掉空行和注释行
mapfile -t subjects < <(grep -vE '^\s*#|^\s*$' "$sub_list")

# 确保所有输出子文件夹都存在
for subj in "${subjects[@]}"; do
    mkdir -p "${NIFTI_DIR}/${subj}"
done

# 导出环境变量以便子进程访问
export NIFTI_DIR
export workdir

# 并行化转换，仅处理尚未转换的文件夹
parallel -j 4 '
    # 检查输出文件夹中是否已有 NIfTI 文件
    if [ -z "$(ls -A ${NIFTI_DIR}/{}/*.nii.gz 2>/dev/null)" ]; then
        echo "正在将 ${workdir}/2024.5.19-8.31/{} 转换到 ${NIFTI_DIR}/{}"
        if dcm2niix -z y -b y -o "${NIFTI_DIR}/{}" "${workdir}/2024.5.19-8.31/{}"; then
            echo "{} 的转换已成功完成。"
        else
            echo "错误：{} 的转换失败。" >&2
        fi
    else
        echo "跳过 ${workdir}/2024.5.19-8.31/{} - 已转换。"
    fi
' ::: "${subjects[@]}"

echo "所有转换已完成！"

